package function

import (
	"math/rand"
	"time"
)

// surname 姓
var surname = [...]string{
	"赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈",
	"褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤", "许",
	"何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏",
	"陶", "姜", "戚", "谢", "邹", "喻", "柏", "水", "窦", "章",
	"云", "苏", "潘", "葛", "奚", "范", "彭", "郎", "鲁", "韦",
	"昌", "马", "苗", "凤", "花", "方", "俞", "任", "袁", "柳",
	"酆", "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺",
	"倪", "汤", "滕", "殷", "罗", "毕", "郝", "邬", "安", "常",
	"乐", "于", "时", "傅", "皮", "卞", "齐", "康", "伍", "余",
	"元", "卜", "顾", "孟", "平", "黄", "和", "穆", "萧", "尹",
	"姚", "邵", "湛", "汪", "祁", "毛", "禹", "狄", "米", "贝",
	"明", "臧", "计", "伏", "成", "戴", "谈", "宋", "茅", "庞",
	"熊", "纪", "舒", "屈", "项", "祝", "董", "梁", "杜", "阮",
	"蓝", "闵", "席", "季", "麻", "强", "贾", "路", "娄", "危",
	"江", "童", "颜", "郭", "梅", "盛", "林", "刁", "钟", "丘",
	"徐", "邱", "骆", "高", "夏", "蔡", "田", "樊", "胡", "凌",
	"霍", "虞", "万", "支", "柯", "昝", "管", "卢", "莫", "经",
	"房", "裘", "缪", "干", "解", "应", "宗", "丁", "宣", "贲",
	"邓", "单", "杭", "洪", "包", "诸", "左", "石", "崔", "吉",
	"钮", "龚", "程", "嵇", "邢", "滑", "裴", "陆", "荣", "翁",
	"荀", "羊", "於", "惠", "甄", "曲", "家", "封", "芮", "羿",
	"储", "靳", "汲", "邴", "糜", "松", "井", "段", "富", "巫",
	"乌", "焦", "巴", "弓", "牧", "隗", "山", "谷", "车", "侯",
	"宓", "蓬", "全", "郗", "班", "仰", "秋", "仲", "伊", "宫",
	"宁", "仇", "栾", "暴", "甘", "钭", "厉", "戎", "祖", "武",
	"符", "刘", "景", "詹", "束", "龙", "叶", "幸", "司", "韶",
	"郜", "黎", "蓟", "薄", "印", "宿", "白", "怀", "蒲", "台",
	"从", "鄂", "索", "咸", "籍", "赖", "卓", "蔺", "屠", "蒙",
	"池", "乔", "阴", "郁", "胥", "能", "苍", "双", "闻", "莘",
	"党", "翟", "谭", "贡", "劳", "逢", "逄", "姬", "申", "扶",
	"堵", "冉", "宰", "郦", "雍", "璩", "桑", "桂", "濮", "福",
	"牛", "寿", "通", "边", "扈", "燕", "冀", "郏", "浦", "尚",
	"农", "温", "别", "庄", "晏", "柴", "瞿", "阎", "充", "慕",
	"连", "茹", "习", "宦", "艾", "鱼", "容", "向", "古", "易",
	"慎", "戈", "廖", "庚", "终", "暨", "居", "衡", "步", "都",
	"耿", "满", "弘", "匡", "国", "文", "寇", "广", "禄", "阙",
	"东", "欧", "殳", "沃", "利", "蔚", "越", "夔", "隆", "师",
	"巩", "厍", "聂", "晁", "勾", "敖", "融", "冷", "訾", "辛",
	"阚", "那", "简", "饶", "空", "曾", "毋", "沙", "乜", "养",
	"鞠", "须", "丰", "巢", "关", "蒯", "相", "查", "荆", "红",
	"游", "竺", "权", "逯", "盖", "益", "桓", "公", "万俟", "司马",
	"上官", "欧阳", "夏侯", "诸葛", "闻人", "东方", "赫连", "皇甫", "尉迟", "公羊",
	"澹台", "公冶", "宗政", "濮阳", "淳于", "单于", "太叔", "申屠", "公孙", "仲孙",
	"轩辕", "令狐", "钟离", "宇文", "长孙", "慕容", "鲜于", "闾丘", "司徒", "司空",
	"亓官", "司寇", "仉督", "子车", "颛孙", "端木", "巫马", "公西", "漆雕", "乐正",
	"壤驷", "公良", "拓拔", "夹谷", "宰父", "谷粱", "晋", "楚", "阎", "法",
	"汝", "鄢", "涂", "钦", "段干", "百里", "东郭", "南门", "呼延", "归",
	"海", "羊舌", "微生", "岳", "帅", "缑", "亢", "况", "后", "有",
	"琴", "梁丘", "左丘", "东门", "西门", "商", "牟", "佘", "佴", "伯", "赏",
	"南宫", "墨", "哈", "谯", "笪", "年", "爱", "阳", "佟", "第五", "言",
}

// name 名
var name = [...]string{
	"元章", "俊良", "修洁", "正奇", "曾笑", "俊智", "志义", "谭三", "天佑",
	"良弼", "高飞", "茂实", "鸿禧", "才哲", "疏珂", "运恒", "吉星", "英华",
	"玉石", "良才", "玉书", "曜灿", "俊彦", "良骏", "雨石", "出野", "咏思",
	"烨华", "冥夜", "星腾", "君墨", "飞虎", "魂兮", "祖鹤", "开济", "飞鸾",
	"奇文", "博艺", "西岭", "兴思", "自强", "鸿煊", "学智", "鸿宝", "寂弦",
	"毅庵", "昊焱", "凯康", "银龙", "秦斩", "昂熙", "宇定", "思淼", "夜洛",
	"彬", "轩", "含", "蒲", "乒",
	"虚", "行", "亭", "仑", "蓝",
	"影", "韬", "函", "克", "盛",
	"衡", "芝", "晗", "昊", "诗",
	"琦", "至", "涵", "伦", "时",
	"映", "志", "菱", "纶", "士",
	"永", "致", "嘉", "旷", "示",
	"咏", "智", "安", "轮", "世",
	"勇", "中", "昂", "律", "业",
	"友", "忠", "敖", "齐", "轼",
	"桓", "林", "言", "群", "书",
	"有", "宣", "颁", "略", "伟",
	"骢", "州", "清", "宏", "充",
	"佑", "洲", "庭", "马", "濮",
	"丹", "乐", "邦", "迈", "卫",
	"平", "乾", "榜", "宸", "蔚",
	"旲", "东", "宝", "昴", "树",
	"材", "纪", "保", "茂", "泓",
	"棋", "竹", "葆", "浩", "魏",
	"妤", "铸", "劻", "玫", "晔",
	"渝", "壮", "羚", "阳", "文",
	"瑜", "卓", "掣", "奎", "船",
	"与", "萱", "豹", "梅", "汶",
	"旭", "濯", "驾", "和", "航",
	"宇", "孜", "邶", "望", "武",
	"羽", "崊", "霆", "美", "希",
	"雨", "淑", "冰", "蒙", "才",
	"凰", "腾", "备", "密", "溪",
	"泰", "子", "辈", "冕", "帅",
	"语", "茜", "蓓", "淼", "曦",
	"玉", "梓", "弼", "民", "奇",
	"禾", "综", "碧", "洋", "霞",
	"连", "祖", "厚", "晨", "先",
	"昱", "选", "昪", "旻", "虹",
	"朔", "济", "彪", "淏", "贤",
	"儋", "冬", "龄", "馗", "娴",
	"钰", "栋", "飙", "传", "舷",
	"御", "端", "澜", "然", "磊",
	"裕", "段", "挺", "名", "春",
	"誉", "天", "飚", "明", "灏",
	"堂", "碫", "莱", "鸣", "双",
	"渊", "琳", "坚", "茗", "一",
	"元", "倩", "宾", "村", "宪",
	"辉", "铎", "妍", "铭", "献",
	"彭", "思", "策", "谋", "祥",
	"序", "伯", "骞", "牧", "翔",
	"启", "恩", "建", "慕", "向",
	"沅", "发", "汗", "穆", "骁",
	"溓", "帆", "健", "恒", "洪",
	"媛", "汉", "键", "威", "晓",
	"源", "冀", "勒", "成", "笑",
	"远", "弘", "龙", "仁", "蕾",
	"棠", "凡", "江", "魁", "伊",
	"德", "方", "城", "铿", "顺",
	"月", "飞", "萍", "皓", "朴",
	"悦", "学", "骄", "楠", "啸",
	"绪", "强", "鲛", "妮", "勰",
	"跃", "霖", "劼", "宁", "兵",
	"越", "芬", "杰", "弩", "淳",
	"起", "丰", "洁", "攀", "心",
	"云", "风", "柴", "旁", "昕",
	"会", "沣", "婕", "薇", "欣",
	"良", "泊", "同", "沛", "新",
	"芸", "川", "悍", "佩", "依",
	"颇", "封", "金", "松", "鸿",
	"耘", "峰", "岩", "日", "竦",
	"韵", "勋", "辰", "朋", "沂",
	"坤", "骥", "晴", "岚", "怡",
	"泽", "锋", "津", "荣", "信",
}

// FuncName 名字函数
type FuncName struct {
	Num     int    `json:"num"`     // 生成数量
	Default string `json:"default"` // 默认值
}

func newFuncName(num int, value string) *FuncName {
	return &FuncName{Num: num, Default: value}
}

func SimpleName(num int) *FuncName {
	return newFuncName(num, "")
}

func DefaultName() *FuncName {
	return newFuncName(10, "张三")
}

func (f *FuncName) Build() []interface{} {
	rand.Seed(time.Now().Unix())
	// No.1 生成指定数量的姓和名
	var result = make([]interface{}, f.Num)
	if f.Default == "" {
		for i := 0; i < f.Num; i++ {
			result[i] = surname[rand.Intn(len(surname))] + name[rand.Intn(len(name))]
		}
	} else {
		for i := 0; i < f.Num; i++ {
			result[i] = f.Default
		}
	}
	return result
}
